package com.ml.netty.demo;

import io.netty.handler.codec.http.HttpHeaders;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.yeauty.annotation.*;
import org.yeauty.pojo.Session;

/**
 * https://zhuanlan.zhihu.com/p/304121881
 * 单个推送服务
 * @author：溪云阁
 * @date：2020年8月4日
 */
@Slf4j
@ServerEndpoint("wss://sandbox.api.sgroup.qq.com/websocket")
public class SingleSocket {

    /**
     * 新建WebSocket的时候，执行该方法
     * @author 溪云阁
     * @param session
     * @param headers void
     */
    @OnOpen
    @SneakyThrows(Exception.class)
    public void onOpen(Session session, HttpHeaders headers) {
        log.info("WebSocket服务连接成功");
    }

    /**
     * 关闭WebSocket的时候，执行该方法
     * @author 溪云阁
     * @param session void
     */
    @OnClose
    @SneakyThrows(Exception.class)
    public void onClose(Session session) {
        log.info("WebSocket服务关闭成功");
    }

    /**
     * WebSocket发生异常的时候，执行该方法
     * @author 溪云阁
     * @param session
     * @param th void
     */
    @OnError
    public void onError(Session session, Throwable th) {
        log.error("{}", th.fillInStackTrace());
        th.printStackTrace();
    }

    /**
     * WebSocket接收到的消息为字符串的时候，指定该方法
     * @author 溪云阁
     * @param session
     * @param msg void
     */
    @OnMessage
    @SneakyThrows(Exception.class)
    public void OnMessage(Session session, String msg) {
        log.info("接收到的信息：{}", msg);
        session.sendText(msg);
    }

}